package cool.tenyears.core.domain;

import cn.hutool.core.collection.CollUtil;
import cool.tenyears.core.enums.RepCodeEnum;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author LiChuan
 * @date 2021/6/29 13:35
 */
@Data
public class RL<T> implements Serializable {
    private static final long serialVersionUID = -6798529198169808095L;
    private int code;
    private String msg;
    private List<T> data;
    private long dataCount;

    /**
     * 返回数据列表
     *
     * @param list 集合
     * @return R
     */
    public static <T> RL<T> list(List<T> list) {
        return ok(list, CollUtil.size(list));
    }

    /**
     * 返回数据列表
     *
     * @param list      集合
     * @param dataCount 数据条数
     * @return R
     */
    public static <T> RL<T> list(List<T> list, long dataCount) {
        return ok(list, dataCount);
    }

    /**
     * 响应数据
     *
     * @param data      数据
     * @param dataCount 数据条数
     * @return R
     */
    public static <T> RL<T> ok(List<T> data, long dataCount) {
        return resultList(RepCodeEnum.SUCCESS, data, dataCount);
    }

    /**
     * 通过枚举构建集合返回类
     *
     * @param en        枚举
     * @param data      响应集合数据
     * @param dataCount 数据条数
     * @return R
     */
    public static <T> RL<T> resultList(RepCodeEnum en, List<T> data, long dataCount) {
        RL<T> r = new RL<T>();
        r.setCode(en.getCode());
        r.setMsg(en.getMsg());
        r.setData(data);
        r.setDataCount(dataCount);
        return r;
    }
}
